package com.candy.dao;

import java.sql.*;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Set;

public class DBHelperPlus {
//main方法，程序的启动入口
//    在idea中可以使用快捷键生成该方法，快捷键：main或者是psvm
    public static void main(String[] args) {
//    异常处理，在idea中可以使用快捷键（ctrl+alt+t),会自动生成异常处理的代码块
        try {
//    （1）注册或实例化jdbc的驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");
//    （2）获取数据库连接对象Connection
//            数据库的连接串
//            jdbc:mysql表示的jdbc链接mysql数据库
//            localhost表示你要链接的数据库的地址，此时的localhost表示本机，可以用127.0.0.1代替
//            3306是mysql的端口号
//            database_name要链接的数据库的名字
            String url="jdbc:mysql://localhost:3306/ld_mysql0317? characterEncoding=utf8 & useSSL=false & serverTimezone=UTC & rewriteBatchedStatements=true";
//            数据库的用户名
            String username="root";
//            数据库的密码
            String password="123456";

            Connection conn= DriverManager.getConnection(url,username,password);
//    （3）获取数据库操作对象Statement（执行增删改查）
            Statement ment= conn.createStatement();
//    （4）执行SQL语句，获取数据操作结果或者结果集对象ResultSet
            String sql="SELECT * FROM userinfo;";
            ResultSet re= ment.executeQuery(sql);
//            为了解决资源关闭后，无法获取ResultSet对象中的数据，一般要进行数据转储操作
//            数据转储需要提供一个容器，常用的转储方法一般采用List+Map的方式或List+JavaBean的方法进行
            LinkedList<LinkedHashMap<String,Object>> lp=new LinkedList();
//            准备一个Map用来存储每一行数据，在这里不要进行实例化处理，在存储数据时在进行实例化
            LinkedHashMap<String,Object> eachRow=null;
//            获取数据表的元数据（表的结构）
            ResultSetMetaData rm=re.getMetaData();
//             获取表中一共有多少列
            int count= rm.getColumnCount();
//    （5）解析结果集对象ResultSet，进行相关的业务处理；
            while(re.next()){
                eachRow=new LinkedHashMap();
//                循环取出每一行数据中每一列的值
                for (int i = 1; i <=count ; i++) {
//                    rm.getColumnName(i)取出对应列的列名作为map的key
//                    re.getObject(i)取出该列对应的值，作为map的value
                eachRow.put(rm.getColumnName(i),re.getObject(i));
                }
//               将每一行的数据存放在list集合中
                lp.add(eachRow);
            }
//        (6)关闭资源；
            re.close();
            ment.close();
            conn.close();
            System.out.println("资源释放之后....");
//            资源关闭后没有办法再继续获取ResultSet对象上的数据的
//            从List+map里面取出数据结果
//            foreach循环，语法：for（要遍历的集合中每一个元素的数据类型 集合中每一个元素的假名：要遍历的集合）{}
            for(LinkedHashMap<String,Object> ls:lp){
//                取出map集合中的所有key值
                Set keys=ls.keySet();
//                对set进行遍历
                for(Object key:keys){
//                    ls.get(key)取出对应key的value
                    System.out.print(key+":"+ls.get(key)+"\t");
                }
//                一行读取完毕后换行
                System.out.println();

            }

        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }catch (SQLException e) {

        }


    }
}
